﻿using System;

namespace 建造者模式
{
    class Program
    {
        static void Main(string[] args)
        {
            var boss = new Director();  //初始化指挥者类

            Builder a = new ConcreteBuilderA();  //初始化员工A

            Builder b = new ConcreteBuilderB();  //初始化员工B


            boss.Construct(b);  //指挥员工B开始组装

            var companyB = b.GetBulidComputer(); //组装完成

            companyB.Show(); //组装完成，电脑送到客户展示


            boss.Construct(a);  //指挥员工A开始组装

            var companyA = a.GetBulidComputer(); //组装完成

            companyA.Show(); //组装完成，电脑送到客户展示

            //模式总结：
            //Director 作为指挥者，主要作用指挥调用，具体员工去处理事情
            //Builder相当于一个员工的操作模板，任何员工都可以按照规定框架操作，具体怎么实时，可以重写方法自己决定
            //ConcreteBuilderA 是实例化Builder的模板的员工A，A重写了Builder的抽象方法
            //ConcreteBuilderB 是实例化Builder的模板的员工B，B重写了Builder的抽象方法
        }
    }
}
